#ifndef GLOBAL_H
#define GLOBAL_H
#include <QWidget>
#include <functional>
#include <QStyle>
#include <memory>
#include <iostream>
#include <mutex>
#include <QDebug>

/***************************************************************
* @brief   repolish:用来刷新qss
***************************************************************/

extern std::function<void(QWidget*)> repolish;

/***************************************************************
* @file    global.h
* @brief   用来实现密码加密的函数
*
* @author  轻语
* @date    2025/02/14
* @history
***************************************************************/
extern std::function<QString(QString)> xorString;

enum ReqId{
    ID_GET_VARIFY_CODE = 1001, //获取验证码
    ID_REG_USER = 1002, //注册用户
    ID_RESET_PWD = 1003, //重置密码
    ID_LOGIN_USER = 1004, //用户登录
    ID_CHAT_LOGIN = 1005, //登陆聊天服务器
    ID_CHAT_LOGIN_RSP= 1006, //登陆聊天服务器回包
    ID_SEARCH_USER_REQ = 1007, //用户搜索请求
    ID_SEARCH_USER_RSP = 1008, //搜索用户回包
    ID_ADD_FRIEND_REQ = 1009,  //添加好友申请
    ID_ADD_FRIEND_RSP = 1010, //申请添加好友回复
    ID_NOTIFY_ADD_FRIEND_REQ = 1011,  //通知用户添加好友申请
    ID_AUTH_FRIEND_REQ = 1013,  //认证好友请求
    ID_AUTH_FRIEND_RSP = 1014,  //认证好友回复
    ID_NOTIFY_AUTH_FRIEND_REQ = 1015, //通知用户认证好友申请
    ID_TEXT_CHAT_MSG_REQ  = 1017,  //文本聊天信息请求
    ID_TEXT_CHAT_MSG_RSP  = 1018,  //文本聊天信息回复
    ID_NOTIFY_TEXT_CHAT_MSG_REQ = 1019, //通知用户文本聊天信息
};

enum Modules{
    REGISTERMOD = 0,
    RESETMOD,
    LOGINMOD,
};

enum ErrorCodes{
    SUCCESS = 0,
    ERR_JSON = 1,//json解析失败
    ERR_NETWORK = 2,//网络错误
};

enum TipErr{
    TIP_SUCCESS = 0,
    TIP_EMAIL_ERR = 1,
    TIP_CONFIRM_ERR = 2,
    TIP_PWD_ERR,
    TIP_PWD_CONFRIM,
    TIP_VARIFY_ERR,
    TIP_USER_ERR
};

enum ClickLbState{
    Normal = 0,
    Selected
};

extern QString gate_url_prefix;

struct ServerInfo{
    QString host;
    QString port;
    QString token;
    int uid;
};

//聊天界面的模式
enum ChatUIMode{
    SearchMode,//搜索模式
    ChatMode,//聊天模式
    ContactMode,//联系模式
};

enum ListItemType{
    APPLY_FRIEND_ITEM = 0,//好友申请
    CHAT_USER_ITEM ,//聊天用户
    CONTACT_USER_ITEM,//联系人用户
    SEARCH_USER_ITEM,//搜索到的用户
    ADD_USER_TIP_ITEM,//提示添加的用户
    INVALID_ITEM,//不可点击条目
    GROUP_TIP_ITEM,//分组提示条目
};

struct MsgInfo{
    QString msgFlag;//"text,image,file"
    QString content;//表示文件和图像的url,文本信息
    QPixmap pixmap;//文件和图片的缩略图
};


//申请好友标签输入的最低长度
const int MIN_APPLY_LABEL_ED_LEN = 40;
const QString add_prefix = "添加标签";
const int tip_offset = 5;
//聊天联系人一页加载人数
const int CHAT_COUNT_PER_PAGE = 13;

#endif // GLOBAL_H
